Шаг 53 - DispGetlDsOfNames.

По информации о типе преобразует заданные имена в соответствующие DISPID. Это рекомендуемая реализация IDispatch::GetIDsOfNames.

HRESULT DispGetIDsOfNames
(
ITypeInfo*ptinfo,
OLECHAR FAR* FAR* rgszNames,
unsigned int cNames,
DISPID FAR* rgdispid
);

Параметры
ptinfo
Указатель на информацию о типе для интерфейса. Эта информация специфична для одного интерфейса и кода языка, так что функции нет необходимости передавать идентификатор интерфейса (IID) и LCID.
rgszNames
Содержащий имена массив строк; это может быть тот же самый массив, что был передан Displnvoke в структуре DISPPARAMS. Если cNames больше 1, то первое имя рассматривается как имя метода, а последующие — как имена параметров данного метода.
cNames
Число элементов rgszNames.
rgdispid
Указатель на массив DISPID, который функция должна заполнить. Первый идентификатор соответствует имени метода, остальные — именам его параметров.

Коды возврата
Из возвращенного HRESULT получают один из следующих кодов возврата:
Код возврата Значение
S_OK Интерфейс поддерживается.
E_INVALIDARG Один из параметров неверен.
DISP_E_UNKNOWNNAME Одно или несколько заданных имен неизвестны. В элементах возвращаемого массива DISPID, соответствующих неизвестным именам, будет содержаться значение DISPID_UNKNOWN.
Другие Могут также возвращаться любые коды возврата ITypelnfo-Invoke.

Пример
Следующий код из примера Lines (файл Points.cpp) реализует функцию-член GetlDs-OfNames для класса CPoints с помощью DispGetlDsOfNames.

STDMETHODIMP CPoints::GetIDsOfNames( 
REFIID riid,
OLECHAR FAR* FAR* rgszNames,
UINT cNames,
LCID lcid,
DISPID FAR* rgdispid) 
{
return DispGetIDsOfNames(m_ptinfo, rgszNames, cNames, rgdispid); 
}
Hosted by uCoz